home *** CD-ROM | disk | FTP | other *** search
/ Software 2000 / Software 2000 Volume 1 (Disc 2 of 2).iso / c64-games.disk / wloo.d64 / chessboard.arc / CB (.txt) < prev   
Encoding:
Commodore BASIC  |  1995-03-03  |  6.4 KB  |  227 lines

  1. 10 REM CHESSBOARD
  2. 20 REM BY ROBERT J. GONZALEZ
  3. 21 REM COPYRIGHT (C) 1985,1986,1987
  4. 25 CR$=CHR$(13)
  5. 30 POKE55,0:POKE56,56:CLR:POKE 808,239
  6. 40 BA=15360
  7. 50 IF PEEK(BA)<>169 THEN LOAD"0:CB.ML/OO",8,1
  8. 55 GOSUB 3000
  9. 60 REM INT SECTION
  10. 70 VT$=""
  11. 80 REM BR=BORDER COLOR
  12. 90 REM MB=MAIN BACKGROUND COLOR
  13. 100 REM LS=LIGHT SQUARE COLOR
  14. 110 REM DS=DARK SQUARE COLOR
  15. 120 REM OS=COLOR SQUARE TURNS TO WHEN YOU PICK UP A PIECE
  16. 130 REM IF OS<0 THEN DON'T CHANGE COLOR
  17. 140 LS=10:DS=11:OS=-1:MB=12:BR=11
  18. 150 POKE 53280,BR
  19. 160 POKE 53281,MB
  20. 170 POKE 53282,LS
  21. 180 POKE 53283,DS
  22. 190 POKE 53284,ABS(OS)
  23. 200 POKE 2040,239:REM SET SPRITE ZERO TO CROSSHAIR
  24. 210 SYS BA+407:REM 9623
  25. 220 REM P1=PLAYER1 COLOR (LIGHT COLOR)
  26. 230 REM P2=PLAYER2 COLOR (DARK  COLOR)
  27. 240 REM P0=CURRENT PLAYER'S COLOR
  28. 250 P1=01:P2=00:POKE829,P2:POKE830,P1
  29. 260 REM PS=BASE SCREEN ADDRESS FOR CAPTURED PIECES
  30. 270 REM PC=BASE COLOR ADDRESS  FOR CAPTURED PIECES
  31. 280 P0=P2:PS=1027:PC=55299
  32. 290 POKE53269,1:REM TURN ON SPRITE ZERO
  33. 300 REM TURN ON EXTENDED BACKGROUND COLOR MODE
  34. 310 POKE 53265,PEEK(53265)OR 64
  35. 320 POKE646,PEEK(53281)AND15:PRINT"[147]";
  36. 330 SYS BA:REM 9216 DRAW BOARD AND PIECES IN ML
  37. 340 POKE646,P1:PRINTVT$;TAB(09);"# OF JOYSTICKS  (1 OR 2)"
  38. 350 JS=0:POKE 198,0:WAIT 198,1:GET A$:JS=-(A$="1")-2*(A$="2")
  39. 360 IF JS=0 THEN350
  40. 370 PRINT"[144]";VT$;TAB(09);"                        "
  41. 380 REM IF SHIFT IS DOWN THEN DONT'T CHANGE PLAYERS
  42. 390 IF PEEK(653)=1 THEN470
  43. 400 REM IF PIECE HAS BEEN RETURNED TO THE SAME SQUARE THEN DON'T CHANGE PLAYERS
  44. 410 IF T%=1 THEN T%=0:GOTO470
  45. 420 IF P0=P2 THEN P0=P1:X=187:Y=190:GOTO440
  46. 430 IF P0=P1 THEN P0=P2:X=187:Y=93
  47. 440 POKE 53248,X:POKE53249,Y
  48. 450 POKE 53287,P0:POKE53264,0
  49. 460 REM DRAW PAWN ON LEFT CENTER OF SCREEN
  50. 470 C=1:SL=1464:CL=55736:SK=45:CR=P0:GOSUB1370:POKE 53269,1
  51. 480 REM READ JOYSTICK
  52. 490 JV=PEEK(56320-((P0=P1)*-(JS=2)))AND 16:POKE 1019,-128*((P0=P1)*-(JS=2))
  53. 500 REM TOGGLE BETWEEN PORTS 1 AND 2 DEPENDING ON THE VALUE OF P0
  54. 510 IF C<>1 THEN580
  55. 520 IF PEEK(197)=4 THEN F1$="RESET ":GOTO620
  56. 530 IF PEEK(197)=62 THEN F1$="QUIT  ":GOTO620
  57. 540 IF PEEK(197)=5 THEN420
  58. 550 IF PEEK(197)=3 THEN GOSUB1430
  59. 560 IF PEEK(197)=6 THEN GOSUB1520
  60. 570 REM CHECK FOR FIRE BUTTON
  61. 575 POKE646,P0:PRINTVT$TAB(14)"CHESSBOARD 3.0";
  62. 580 IF JV=0 THEN GOSUB710:IF  C=3 THEN C=1:GOTO390
  63. 590 X=256*PEEK(53264)+PEEK(53248)
  64. 600 Y=PEEK(53249)
  65. 610 GOTO490
  66. 620 POKE 646,P0:PRINTVT$;TAB(4)F1$;"ARE YOU SURE? (Y OR N)";
  67. 630 POKE198,0:WAIT198,1:GETA$
  68. 640 PRINTVT$;"                                      ";
  69. 650 ON-(F1$="QUIT  ") GOTO680
  70. 660 ON-(A$="Y")-2*(A$="N") GOTO700,540
  71. 670 GOTO620
  72. 680 ON-(A$="N")GOTO540
  73. 690 SYS 2048
  74. 700 P0=P2:GOTO320
  75. 710 GOSUB1290
  76. 720 IF C=1 THEN C=2:GOSUB740:RETURN:PICK UP PIECE
  77. 730 IF C=2 THEN C=3:GOSUB860:RETURN:SET PIECE DOWN
  78. 740 IF CHAR<09 AND P0=P1 THEN C=1:RETURN
  79. 750 IF CHAR>30 AND P0=P2 THEN C=1:RETURN
  80. 760 AS=1024+40*ROW+CHAR:AC=55296+40*ROW+CHAR
  81. 770 SC=PEEK(AS):CC=(PEEK(AC)AND15)
  82. 780 BK=(SC AND 192):SC=(SC AND 63)
  83. 790 IF SC=32 OR CC<>P0 THEN C=1:RETURN
  84. 800 SP=-(SC=0)-2*(SC=9)-3*(SC=18)-4*(SC=27)-5*(SC=36)-6*(SC=45)-7*(SC=54)
  85. 810 POKE 2040,231+SP
  86. 820 IF OS<0 THEN POKE 53284,PEEK(53281-(BK=64)-2*(BK=128))AND15
  87. 830 SL=AS:CL=AC:SK=32+192:CR=PEEK(53284)AND15
  88. 840 GOSUB1370
  89. 850 RETURN
  90. 860 IF T%=2 THEN RETURN
  91. 870 IF CHAR<09 AND P0=P1 THEN C=2:RETURN
  92. 880 IF CHAR>30 AND P0=P2 THEN C=2:RETURN
  93. 890 IF(CHAR<09ANDP0=P2)OR(CHAR>30ANDP0=P1)THEN Q=1:C1=P0:GOSUB1080:GOTO980
  94. 900 BS= 1024+40*ROW+CHAR:BC=55296+40*ROW+CHAR
  95. 910 S1=PEEK(BS):C1=(PEEK(BC)AND15)
  96. 920 IF C1=P0 THENC=2:RETURN
  97. 930 IF(S1 AND 63)<>32 THEN GOSUB1080
  98. 940 SL=BS:CL=BC
  99. 950 SK=(SP-1)*9+(S1 AND 192):CR=P0
  100. 960 IF (S1 AND 192)=192 THEN T%=2:SK=(SP-1)*9+BK
  101. 970 GOSUB1370
  102. 980 POKE 53269,0:POKE 2040,239
  103. 990 IFT%=2 THEN T%=1:RETURN
  104. 1000 T=-(BK=64)-2*(BK=128)
  105. 1010 SL=AS:CL=AC:SK=32+BK:CR=(PEEK(53281+T)AND15)
  106. 1020 GOSUB1370
  107. 1030 IF Q=1 THEN Q=0:RETURN
  108. 1040 IF(ROW=21)AND(P0=P2)AND(SC=45) THEN GOSUB1180
  109. 1050 IF(ROW=0)AND(P0=P1)AND(SC=45) THEN GOSUB1180
  110. 1060 RETURN
  111. 1070 REM CAPTURE PIECE ROUTINE
  112. 1080 AA=0:IF C1=P1 THEN AA=30
  113. 1090 IF Q=1 THEN Q%=SC:GOTO1110
  114. 1100 Q%=(PEEK(BS)AND63)
  115. 1110 GOSUB1970
  116. 1120 SL=PS+AA+120*(I-1):SK=Q%:CL=PC+AA+120*(I-1)
  117. 1130 CR=P2:IF C1=P1 THEN CR=P1
  118. 1140 IF(PEEK(SL)AND192)=192 THEN T%=2
  119. 1150 GOSUB1370
  120. 1160 RETURN
  121. 1170 REM PAWN PROMOTION ROUTINE
  122. 1180 POKE 646,P0
  123. 1190 PRINT VT$;TAB(9)"PRESS 'Q','R','B' OR 'K' "
  124. 1200 POKE198,0:WAIT198,1:GETA$
  125. 1210 RP=-10*(A$="Q")-19*(A$="R")-28*(A$="K")-37*(A$="B")-55*(A$="N")
  126. 1220 IF RP=0 THEN1200
  127. 1230 SL=BS:CL=BC:SK=(RP-1)+(PEEK(BS)AND192):CR=P0
  128. 1240 GOSUB1370
  129. 1250 PRINT VT$;TAB(9)"                        "
  130. 1260 RETURN
  131. 1270 REM DETERMINE CHARACTER POSITION OF SPRITE AND ROUND TO UPPER
  132. 1280 REM LEFT CHARACTER OF NINE CHARACTER BLOCK
  133. 1290 ROW=INT((Y-49)/8):CHAR=INT((X-24)/8)
  134. 1300 FOR T=21 TO 0 STEP -3:IF ROW=>T THEN ROW=T:T=0:NEXTT:GOTO1320
  135. 1310 NEXT T:ROW=0
  136. 1320 FOR T=36 TO 03 STEP-3:IF CHAR=>T THEN CHAR=T:T=01:NEXTT:GOTO1340
  137. 1330 NEXT T:CHAR=03
  138. 1340 RETURN
  139. 1350 REM PRINT A NINE BLOCK CHARACTER EITHER A PLAYING PIECE
  140. 1360 REM OR BLANK FOR ERASING A PIECE
  141. 1370 FOR I=0 TO 2
  142. 1380 FOR J=0 TO 2
  143. 1390 POKE SL+I*40+J,SK+I*3+J
  144. 1400 POKE CL+I*40+J,CR
  145. 1410 NEXTJ,I
  146. 1420 RETURN
  147. 1430 SN$="":M$="SAVE ":POKE 646,P0:GOSUB1570
  148. 1440 IF SN$="" THEN1490
  149. 1450 GOSUB1660:IF E<>0 THEN GOSUB1770:GOTO1490
  150. 1460 FE=0
  151. 1470 GOSUB1700
  152. 1480 IF FE<>0 THEN GOSUB1690:GOTO1430
  153. 1490 PRINTVT$;TAB(3);"                               ";:RETURN
  154. 1500 REM NOTE:  ALL COLORS MUST BE THE SAME FOR A LOAD
  155. 1510 REM        AS THEY WERE FOR THE SAVE
  156. 1520 SN$="":M$="LOAD ":POKE 646,P0:GOSUB1570:
  157. 1530 IF SN$="" THEN1560
  158. 1540 GOSUB1660:IF E<>0 THEN1520
  159. 1550 GOSUB1850
  160. 1560 PRINTVT$;TAB(3);"                               ";:RETURN
  161. 1570 PRINT VT$;TAB(4)M$"FILE NAME:*             ";
  162. 1580 POKE 198,0:WAIT 198,1:GET A$
  163. 1590 IF ASC(A$)=20 AND SN$<>"" THEN SN$=LEFT$(SN$,LEN(SN$)-1):GOTO1640
  164. 1600 IF ASC(A$)=13 THEN RETURN
  165. 1610 IF ASC(A$)<32 OR ASC(A$)>90 THEN1580
  166. 1620 IF LEN(SN$)>15 THEN1580
  167. 1630 SN$=SN$+A$
  168. 1640 PRINTVT$;TAB(4)M$"FILE NAME:";SN$;LEFT$("*               ",16-LEN(SN$));
  169. 1650 GOTO1580
  170. 1660 GOSUB1930
  171. 1670 OPEN5,8,5,"0:"+SN$+",U,R":CLOSE5
  172. 1680 GOSUB1940
  173. 1690 CLOSE15:OPEN 15,8,15:INPUT#15,E,E$:RETURN
  174. 1700 PRINTVT$TAB(04)"FILE EXISTS  REPLACE (Y OR N)";
  175. 1710 POKE198,0:WAIT198,1:GETA$
  176. 1720 IF A$<>"Y"ANDA$<>"N" THEN1710
  177. 1730 GOSUB1930
  178. 1740 IF A$="N" THEN FE=-1:GOTO1940
  179. 1750 PRINT#15,"S0:"+SN$
  180. 1760 GOTO1780
  181. 1770 GOSUB1930
  182. 1780 GOSUB1950
  183. 1790 OPEN5,8,5,"0:"+SN$+",U,W"
  184. 1800 SYS BA+667:REM 9883
  185. 1810 SYS BA+704:REM 9920
  186. 1820 CLOSE5
  187. 1830 GOSUB1960
  188. 1840 GOTO1940
  189. 1850 GOSUB1930
  190. 1860 GOSUB1950
  191. 1870 OPEN5,8,5,"0:"+SN$+",U,R"
  192. 1880 SYS BA+667:REM 9883
  193. 1890 SYS BA+753:REM 9969
  194. 1900 CLOSE5
  195. 1910 GOSUB1960
  196. 1920 GOTO1940
  197. 1930 POKE 53265,PEEK(53265)AND 239:RETURN:SCREEN OFF
  198. 1940 POKE 53265,(PEEK(53265)AND 239)+16:RETURN:SCREEN ON
  199. 1950 CLOSE15:OPEN15,8,15,"UI-":RETURN
  200. 1960 CLOSE15:OPEN15,8,15,"UI+":RETURN
  201. 1970 I=-1*(Q%=18)-2*(Q%=27)-3*(Q%=36)-4*(Q%=0)-5*(Q%=9)-7*(Q%=54)-8*(Q%=45)
  202. 1980 ON I GOTO2000,2020,2000,2020,2020,2020,2020,2040
  203. 1990 RETURN
  204. 2000 IF PEEK(PS+AA+120*(I-1))=Q% THEN I=-8*(Q%=18)-6*(Q%=36):GOTO2020
  205. 2010 RETURN
  206. 2020 IF PEEK(PS+AA+120*(I-1))=Q% THEN Q%=45:GOTO2040
  207. 2030 RETURN
  208. 2040 I=0:AA=AA+3
  209. 2050 IF PEEK(PS+AA+120*I)=Q% THEN I=I+1:GOTO2050
  210. 2060 I=I+1:RETURN
  211. 3000 PRINT"[147]CHESSBOARD 3.0
  212. 3002 [153]"";"THIS PROGRAM IS BEING RELEASED UNDER THE SHAREWARE CONCEPT.";
  213. 3005 [153]"IT DEMONSTRATES ALL  THE GRAPHICS FEATURES OF THE 64";
  214. 3010 [153]" EXCEPT  BIT MAP, MULTICOLOR BIT MAP, MULTICOLOR CHARACTERS AND ";
  215. 3015 [153]"MULTICOLOR SPRITES.
  216. 3020 PRINT"IF YOU LIKE IT AND KEEP IT PLEASE SEND  $1.00 OR WHATEVER YOU THINK"
  217. 3026 PRINT"FEEL FREE TO COPY AND GIVE IT TO OTHERS, JUST LEAVE THIS MESSAGE ";
  218. 3027 PRINT"IN.  THANX :-)"
  219. 3030 PRINT"ROBERT J. GONZALEZ
  220. 3035 [153]"1735 W. CORTEZ STREET #202
  221. 3040 PRINT"PHOENIX, AZ 85029-5935
  222. 3045 [153]"E-MAIL COMMENTS TO: ";
  223. 3050 [153]"GONZO@INDIRECT.COM
  224. 3060 TI$="000000"
  225. 3065 IF VAL(RIGHT$(TI$,2))<15 THEN 3065
  226. 3070 RETURN
  227.